﻿#ifndef __SS_LOG_BASE_H__
#define __SS_LOG_BASE_H__
#include "../tools/ssProcessInfo.h"
#include "../string/ssString.h"
#include "../message/ssMsgIdDef.h"
#include <fstream>

#define	LOG_STR_LEN		2000
#define	LOG_TIME_LEN	11
#define	LOG_PRINT_LEN	1980

namespace StarSeeker
{

enum SS_LOG_TYPE: int
{
	LOG_NULL = 0,
	LOG_TRACE = 1,//追踪
	LOG_DEBUG = 2,//调试
	LOG_INFO = 4,//一般信息
	LOG_WARN = 8,//警告
	LOG_ERROR = 16,//错误
	LOG_FATAL = 32,//严重错误
	LOG_FILE_ONLY = 32768//只写入文件
};

class ssLogBase
{
public:
	ssLogBase();
	ssLogBase(u8 type, const char* path);
	virtual ~ssLogBase();
protected:
	//输出到缓冲区
	void OutPut2Buffer(SS_LOG_TYPE type, const char *pLogString, ssString& buffer);
	void OutPutEx2Buffer(SS_LOG_TYPE type, const char *pLogString, va_list &vaList, ssString& buffer);
	//输出到新内存
	void OutPut2Msg(SS_LOG_TYPE type, const char *pLogString, ssMsg_s& msg);
	void OutPutEx2Msg(SS_LOG_TYPE type, const char *pLogString, va_list &vaList, ssMsg_s& msg);
	// 保存到文件
	void SaveToFile(const char * pStr);
	// 打开文件
	void MakeDir();
	// 关闭文件
	void CloseFile();
	//
	static const char* GetLogType(SS_LOG_TYPE type);
private:
	char			m_lastDate[32];	//上一次打开文件的日期
	ssString		m_filePath;		//文件路径
	ssString		m_folder;		//文件夹名
	std::ofstream	m_fstream;		//文件流
	ssProcessInfo	m_info;
	u8				m_subsection;	//文件分段类型：0按天，1按小时
public:
	i32				m_printFlag;
	i32				m_fileFlag;
};

}


#endif
